package com.zjxf.utils;

import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * Created with IntelliJ IDEA.
 * author: create by ZhangHao
 * Date: 2019/7/24
 * Time: 16:18
 */
public class ZStringUtils {

    /**
     * 请求参数格式转换 aop 接口使用
     *
     * @param parameterNames  parameterNames
     * @param parameterValues parameterValues
     * @return String
     */
    public static String parseParams(String[] parameterNames, Object[] parameterValues) {
        StringBuilder stringBuffer = new StringBuilder();
        stringBuffer.append("[");
        int length = parameterNames.length;
        for (int i = 0; i < length; i++) {
            String parameterName = parameterNames[i];
            Object parameterValueObj = parameterValues[i];
            if (parameterValueObj == null) {
                return StringUtils.EMPTY;
            }
            if (!(parameterValueObj instanceof HttpServletRequest) && !(parameterValueObj instanceof HttpServletResponse)) {
                String parameterValue = JSON.toJSONString(parameterValueObj, Boolean.FALSE);
                stringBuffer.append(parameterName).append(":").append(parameterValue).append(" ");
            }
        }
        stringBuffer.append("]");
        return stringBuffer.toString();
    }

    /**
     * 拼接key-value 值字符串
     *
     * @param params 参数key-value
     * @return String 拼接结果
     */
    public static String splicingParams(Map<String, Object> params) {
        return params.entrySet()
                .stream().map(entity -> entity.getKey() + "=" + entity.getValue())
                .collect(Collectors.joining("&"));
    }

    /**
     * 获取文件名称或者路径中的文件后缀
     *
     * @param fileNameOrPath 目标文件或者地址
     * @return String 后缀名称(不含点  例子: jpg)
     */
    public static String getSuffixNameByFileName(String fileNameOrPath) {
        if (StringUtils.isNotBlank(fileNameOrPath)) {
            return fileNameOrPath.substring(fileNameOrPath.lastIndexOf(".") + 1);
        } else {
            return StringUtils.EMPTY;
        }
    }

    public static void main(String[] args) {
        System.out.println(getNameByFileName("D://index撒的撒打算/ss/1.jpg"));
    }

    /**
     * 获取文件名称
     *
     * @param fileNameOrPath 文件名称
     * @return String
     */
    public static String getNameByFileName(String fileNameOrPath) {
        String name = new File(fileNameOrPath).getName();
        if (StringUtils.isNotBlank(name)) {
            return name.substring(0, name.lastIndexOf("."));
        } else {
            return StringUtils.EMPTY;
        }
    }

    /**
     * 获取文件名称
     *
     * @param fileNameOrPath 文件名称
     * @return String
     */
    public static String getParentPathByFilePath(String fileNameOrPath) {
        if (StringUtils.isNotBlank(fileNameOrPath)) {
            return fileNameOrPath.substring(0, fileNameOrPath.lastIndexOf("/") + 1);
        } else {
            return StringUtils.EMPTY;
        }
    }

    /**
     * 获取文件名称或者路径中的文件名称
     *
     * @param filePath 目标文件或者地址
     * @return String
     */
    public static String getFileNameByUrl(String filePath) {
        if (StringUtils.isNotBlank(filePath)) {
            return filePath.substring(filePath.lastIndexOf("/") + 1);
        } else {
            return StringUtils.EMPTY;
        }
    }

    /**
     * 获取UUID
     *
     * @return String UUID(带横杠的)
     */
    public static String getUUID() {
        return UUID.randomUUID().toString();
    }

    /**
     * 获取文件返回头部类型
     *
     * @param filePath 文件地址
     * @return String 文件头部content-type
     * @throws IOException 流异常
     */
    public static String getContentType(String filePath) throws IOException {
        return Files.probeContentType(Paths.get(filePath));
    }

    /**
     * 脱敏处理身份证号码 , 中间四位换成*号码
     *
     * @param id 身份照号码
     * @return String 脱敏处理后的结果
     */
    public static String idCardNum(String id) {
        if (StringUtils.isBlank(id)) {
            return StringUtils.EMPTY;
        }
        String num = StringUtils.right(id, 4);
        return StringUtils.leftPad(num, StringUtils.length(id), "*");
    }

    /**
     * 获取html中的img标签的
     *
     * @param htmlCode html标签内容
     * @return List<String>
     */
    public static List<String> getImageSrc(String htmlCode) {
        List<String> imageSrcList = new ArrayList<>();
        Pattern p = Pattern.compile("<img\\b[^>]*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg|\\.bmp|\\.eps|\\.gif|\\.mif|\\.miff|\\.png|\\.tif|\\.tiff|\\.svg|\\.wmf|\\.jpe|\\.jpeg|\\.dib|\\.ico|\\.tga|\\.cut|\\.pic)\\b)[^>]*>", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(htmlCode);
        String quote;
        String src;
        while (m.find()) {
            quote = m.group(1);
            src = (quote == null || quote.trim().length() == 0) ? m.group(2).split("\\s+")[0] : m.group(2);
            imageSrcList.add(src);
        }
        return imageSrcList;
    }

    /**
     * 校验是否是地区标志
     *
     * @param locationStr 高德定位参数
     * @return Boolean
     */
    public static Boolean checkLocationStr(String locationStr) {
        return true;
    }

}
